Computer users typically use user agent applications such as web browsers to access documents and other resources that are available over a computer network, and perform other functions such as communicate with friends, play games, and upload resources to the network to be accessed by others.
Typically, an application programming interface (API) is built into a user agent for the purpose of extending the user agent's functionality. Such an API defines ways in which other software applications may request services from the user agent. This allows “add-on” or “plugin” software to be written to extend the functionality of the user agent, based on vocabulary and calling conventions defined within the relevant API. Furthermore, the API information can be published to allow third parties to develop add-ons or plugins for the user agent.
However, user agents such as web browsers are increasingly being used on mobile or handheld devices with limited processing, memory, and storage capabilities. Examples of such devices include cellular telephones, personal digital assistants (PDA's), “netbooks,” etc. The installation of add-on or plugin software consumes memory and storage of such devices, as does the inclusion of the API in the user agent. Also, downloading add-on or plugin software to mobile/handheld devices can be slow, due to the amount of data being downloaded and the limited bandwidth and processing capabilities of such devices.
Furthermore, it is not possible for an add-on or plugin to change the actual native code of the device. Thus, the binary code of the base version of the user agent cannot be changed or updated using software extensions such as add-ons or plugins.